<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Схема базы данных</title>
<link rel="stylesheet" type="text/css" href="../css/style.css" />
</head>
<body>
<hr />
	<a href="../functional-requirements/index.html">Описание системы</a>&nbsp;
	<a href="techdoc.html" title="technicaldocumantation">Техническая документация</a>&nbsp;
    <a href="software-architecture.html">Архитектура проекта</a> &nbsp;
<hr />

	<h2>Схема базы данных</h2>

	<p>База данных работает под управлением СУБД MySQL5.</p>
	<p>
		В <a href="../../sql/0002_init.sql">приложении</a> представлены sql
		скрипты для создания таблиц базы данных приложения.
	</p>
	<p><strong>Схема базы данных smk:</strong></p>
	<h3>
		<img src="img/schemeDB.JPG" width="880" height="350" /> 
		
	</h3>

	<h4>В базе данных 12 таблиц:</h4>
	<ol class="num">
		<li><a href="#post" title="post">post</a> - должность;</li>
		<li><a href="#employee" title="employee"> employee </a> -
			сотрудник (в текущей версии требований - руководитель структурного
			подразделения);</li>
		<li><a href="#person" title="person">person</a> - пользователь
			системы;</li>
		<li><a href="#permission" title="permission">permission</a> -
			разрешения (связь пользователя с ролью в системе);</li>
		<li><a href="#role" title="role">role</a> - роль пользователя в
			системе;</li>
		<li><a href="#department_type" title="department_type">department_type</a>
			- тип структурного подразделения;</li>
		<li><a href="#department" title="department">department</a> -
			структурное подразделение;</li>
		<li><a href="#process" title="process">process</a> - процесс;</li>
		<li><a href="#indicator" title="indicator">indicator</a> - целевой показатель;</li>
		<li><a href="#unit" title="unit">unit</a> - единица измерения покозателей;</li>
		<li><a href="#responsibility" title="responsibility">responsibility</a> - целевой показатель;</li>
		<li><a href="#indicator_value" title="indicator_value">indicator_value</a> - значения целевого показателя;</li>
	</ol>

	<h3>
		Описание полей таблиц и <span style="color: black;">ограничений</span>
	</h3>
	<p>
		<i>Зам.: Поскольку MySQL поддерживает транзакционный тип таблиц,
			то при создании таблиц требуется указать тип создаваемой таблицы
			TYPE=INNODB. Что повысит надожность работы в данными.</i>
	</p>

	<h4>
		<a name="post"></a>Таблица должность (post)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор должности</li>
		<li>`name` VARCHAR(50) NOT NULL - название должности</li>
		<li>`is_unique` BOOLEAN NOT NULL - уникальность должности,
			является ли она уникальной в организации</li>
	</ul>

	<h4>
		<a name="employee"></a> Таблица сотрудник (employee)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - иденификатор
			сотрудника</li>
		<li>`id_person` INT NOT NULL - идентификатор пользователя</li>
		<li>`id_post` INT NOT NULL - идентификатор должности</li>
		<li>`rate` FLOAT NOT NULL - ставка</li>
		<li>FOREIGN KEY (`id_person`) REFERENCES `person`(`id`)</li>
		<li>FOREIGN KEY (`id_post`) REFERENCES `post`(`id`)</li>
	</ul>

	<h4>
		<a name="person"></a>Таблица пользователь системы (person)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор
			пользователя</li>
		<li>`login` VARCHAR(30) NOT NULL - логин</li>
		<li>`password` VARCHAR (32) NOT NULL - MD5 хэш пароля</li>
		<li>`surname` VARCHAR (30) NOT NULL - фамилия</li>
		<li>`name` VARCHAR (30) NOT NULL - имя</li>
		<li>`patronymic` VARCHAR (30) - отчество</li>
	</ul>

	<h4>
		<a name="permission"></a>Таблица разрешений (permission)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор
			разрешения</li>
		<li>`id_person` INT NOT NULL - идентификатор пользователя</li>
		<li>`id_role` INT NOT NULL - идентификатор роли пользователя</li>
		<li>FOREIGN KEY (`id_person`) REFERENCES `person` (`id`)</li>
		<li>FOREIGN KEY (`id_role`) REFERENCES `role` (`id`)</li>
	</ul>

	<h4>
		<a name="role"></a>Таблица ролей (role)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT, - идентификатор роли</li>
		<li>`name` VARCHAR (30), - название роли</li>
	</ul>

	<h4>
		<a name="department_type"></a>Таблица тип структурного подразделения
		(department_type)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор типа
			структурного подразделения</li>
		<li>`name` VARCHAR(30) NOT NULL - название типа структурного
			подразделения</li>
		<li>`id_post` INT NOT NULL – идентификатор должности</li>
	</ul>

	<h4>
		<a name="department"></a>Таблица структурное подразделение
		(department)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор
			структурного подразделения</li>
		<li>`name` VARCHAR(150) NOT NULL - название структирного
			подразделения</li>
		<li>`id_parent` INT - идентификатор родительского структурного
			подразделения</li>
		<li>`id_department_type` INT NOT NULL - идентификатор типа
			структурного подразделения</li>
		<li>`id_employee` INT NOT NULL - идентификатор руководителя
			структурного подразделения</li>
		<li>FOREIGN KEY (`id_parent`) REFERENCES `department`(`id`)</li>
		<li>FOREIGN KEY (`id_employee`) REFERENCES `employee`(`id`)</li>
		<li>FOREIGN KEY (`id_department_type`) REFERENCES
			`department_type`(`id`)</li>
	</ul>

	<h4>
		<a name="process"></a>Таблица процесс (process)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор процесса</li>
		<li>`code` VARCHAR(30) NOT NULL - код процесса</li>
		<li>`name` VARCHAR(250) NOT NULL - название процесса</li>
		<li>`object` TEXT (50000) NOT NULL - цель процесса</li>
		<li>`id_owner` INT NOT NULL - должность владельца процесса</li>
		<li>FOREIGN KEY (`id_owner`) REFERENCES `post`(`id`)</li>
	</ul>

	<h4>
		<a name="indicator"></a>Таблица целевых показателей (indicator)
	</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - индикатор целевого
			показателя</li>
		<li>`name` VARCHAR (250) NOT NULL - название целевого
			показателя</li>
		<li>`weight` FLOAT NOT NULL - весовой коэффициент целевого
			показателя</li>
		<li>`is_objective` BOOLEAN NOT NULL - показатель является
			целевым (true)</li>
		<li>`year` SMALLINT NOT NULL - год, для которого определен
			целевой показатель</li>
		<li>`plan_value` FLOAT – плановое значение</li>	
		<li>`id_parent` INT - идентификатор родительского показателя</li>
		<li>`id_unit` INT NOT NULL - идентификатор единицы измерения</li>
		<li>`id_process` INT NOT NULL - идентификатор процесса, к
			которому относится показатель</li>
		<li>FOREIGN KEY (`id_unit`) REFERENCES `unit`(`id`)</li>
		<li>FOREIGN KEY (`id_process`) REFERENCES `process`(`id`)</li>
		<li>FOREIGN KEY (`id_parent`) REFERENCES `indicator`(`id`)</li>
	</ul>

	<h4><a name="unit"></a>Таблица единиц измерения (unit)</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор единицы
			измерения</li>
		<li>`name` VARCHAR (15) NOT NULL - название единицы измерения</li>
	</ul>

	<h4><a name="responsibility"></a>Таблица исполнителей (responsibility)</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор исполнителя</li>
		<li>`is_monitoring` TINYINT NOT NULL CHECK (`is_monitoring ` IN (1, 2, 3)), 
		-- 1 - мониторинг, нет доступа к изменению данных 
		-- 2 - заполнение показателя без возможности изменения планового значения 
		-- 3 - заполнение показателя с возможностью редактирования плановых значений</li>
		<li>`plan_value` FLOAT - плановое значение</li>
		<li>`id_department` INT NOT NULL - иденификатор структурного
			подразделения-исполнителя</li>
		<li>`id_indicator` INT NOT NULL, - идентификатор показателя</li>
		<li>FOREIGN KEY (`id_indicator`) REFERENCES `indicator`(`id`)</li>
		<li>FOREIGN KEY (`id_department`) REFERENCES `department`(`id`)</li>
	</ul>

	<h4><a name="indicator_value"></a>Таблица значений целевых показателей (indicator_value)</h4>
	<ul>
		<li>`id` INT PRIMARY KEY AUTO_INCREMENT - идентификатор значений целевых показателей</li>
		<li>`quarter` TINYINT NOT NULL CHECK (`quarter` IN (1, 2, 3, 4)) - номер квартала</li>
		<li>`value` FLOAT - значение</li>
		<li>`plan_value` FLOAT - плановое значение</li>
		<li>`id_responsibility` INT NOT NULL - идентификатор исполнителя</li>
		<li>FOREIGN KEY (`id_responsibility`) REFERENCES
			`responsibility`(`id`)</li>
	</ul>

<hr />	
	<a href="../functional-requirements/index.html">Описание системы</a>&nbsp;
	<a href="techdoc.html" title="technicaldocumantation">Техническая документация</a>&nbsp;
    <a href="software-architecture.html">Архитектура проекта</a> &nbsp;
<hr />	
</body>
</html>